export default class ArrayUtil {
    /**
     * 数组元素交换位置
     * @param {array} arr 数组
     * @param {number} index1 添加项目的位置
     * @param {number} index2 删除项目的位置
     * index1和index2分别是两个数组的索引值，即是两个要交换元素位置的索引值，如1，5就是数组中下标为1和5的两个元素交换位置
     */
    static swapArray = (arr: Array<any>, index1: number, index2: number) => {
        arr[index1] = arr.splice(index2, 1, arr[index1])[0]
        return arr
    }

    /**
     * 上移
     * @param arr
     * @param index
     */
    static zIndexUp = (arr: Array<any>, index: number) => {
        if (index != 0) {
            ArrayUtil.swapArray(arr, index, index - 1)
        }
    }

    /**
     * 下移
     * @param arr
     * @param index
     */
    static zIndexDown = (arr: Array<any>, index: number) => {
        if (index + 1 != arr.length) {
            ArrayUtil.swapArray(arr, index, index + 1)
        }
    }

    /**
     * 置顶
     * @param arr
     * @param index
     */
    static zIndexTop = (arr: Array<any>, index: number) => {
        if (index != 0) {
            //首先判断当前元素需要上移几个位置,置底移动到数组的第一位
            var moveNum = index - 0

            //循环出需要一个一个上移的次数
            for (var i = 0; i < moveNum; i++) {
                ArrayUtil.swapArray(arr, index, index - 1)

                index--
            }
        }
    }

    /**
     * 置底
     * @param arr
     * @param index
     */
    static zIndexBottom = (arr: Array<any>, index: number) => {
        if (index + 1 != arr.length) {
            //首先判断当前元素需要上移几个位置,置底移动到数组的第一位
            var moveNum = arr.length - 1 - index

            //循环出需要一个一个上移的次数
            for (var i = 0; i < moveNum; i++) {
                ArrayUtil.swapArray(arr, index, index + 1)

                index++
            }
        }
    }

    /**
     * 获取差集
     * @param arr1
     * @param arr2
     * @returns
     */
    static diff = (arr1: Array<any>, arr2: Array<any>) => {
        return arr1.filter((val) => arr2.indexOf(val) === -1)
    }
}
